package com.yugao.fintech.draper.idempotent.config;

import com.yugao.fintech.draper.idempotent.keyresolver.impl.DefaultIdempotentKeyResolver;
import com.yugao.fintech.draper.idempotent.keyresolver.impl.ExpressionIdempotentKeyResolver;
import com.yugao.fintech.draper.idempotent.aspect.IdempotentAspect;
import com.yugao.fintech.draper.idempotent.cache.IdempotentRedisService;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.data.redis.core.StringRedisTemplate;

@AutoConfiguration
public class IdempotentAutoConfig {

	@Bean
	public DefaultIdempotentKeyResolver defaultIdempotentKeyResolver() {
		return new DefaultIdempotentKeyResolver();
	}

	@Bean
	public ExpressionIdempotentKeyResolver expressionIdempotentKeyResolver() {
		return new ExpressionIdempotentKeyResolver();
	}

	@Bean
	public IdempotentRedisService idempotentRedisDAO(StringRedisTemplate RedisTemplate) {
		return new IdempotentRedisService(RedisTemplate);
	}

	@Bean
	public IdempotentAspect idempotentAspect(IdempotentRedisService idempotentRedisService) {
		return new IdempotentAspect(idempotentRedisService);
	}
}
